/*
    对 db.json文件进行数据操作
*/
var fs = require('fs')
var db_path = './db.json'

function getDB(path){
    return new Promise((resolve,reject)=>{
        fs.readFile(path,'utf-8',(err,data)=>{
            if(err) return reject(err)
            resolve(data)
        })
    })
}

// 获取所有学生列表
exports.FindAll = function(call){
    getDB(db_path).then(data=>{
        return call(data)
    },err=>{
        return call(err.message)
    })
}

// 添加保存学生
exports.Save = function(student,call){
    getDB(db_path).then(data=>{
        var stu = JSON.parse(data).students
        console.log(stu)
        student.id = stu[stu.length-1].id+1  // id 自动 +1
        console.log(student)
        stu.push(student)
        stu = JSON.stringify({
            students: stu
        })
        fs.writeFile(db_path,stu,(err)=>{
            if(err) return call(err.message)
            call(null)
        })
    },err=>{
        return call(err.message)
    })
}

// 根据 id获取学生信息
exports.FindOne = function(sid,call){
    getDB(db_path).then(data=>{
        var stu = JSON.parse(data).students
        var s = stu.find(item=> item.id == sid)
        return call(s)
    },err=>{
        return call(err.message)
    })
}

// 更新学生
exports.Update = function(student,call){
    getDB(db_path).then(data=>{
        var stu = JSON.parse(data).students
        var s = stu.find(item=> item.id == student.id)
        for(var key in student){
            if(student[key] != "")
                s[key] = student[key]
        }
        var newstu = JSON.stringify({
            students: stu
        })
        fs.writeFile(db_path,newstu,(err)=>{
            if(err) return call(err.message)
            call(null)
        })
    },err=>{
        return call(err.message)
    })
}

// 删除学生
exports.Delete = function(sid,call){
    getDB(db_path).then(data=>{
        var stu = JSON.parse(data).students
        var delstu = stu.findIndex(item=> item.id == sid) 
        // findIndex 根据条件找下标
        stu.splice(delstu,1)
        var newstu = JSON.stringify({
            students: stu
        })
        fs.writeFile(db_path,newstu,(err)=>{
            if(err) return call(err.message)
            call(null)
        })
    },err=>{
        return call(err.message)
    })
}